/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.ufrgs.inf.inf05005.main;

import br.ufrgs.inf.inf05005.automatos.Automato;
import br.ufrgs.inf.inf05005.utils.Utils;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;

/**
 *
 * @author fkrahe
 */
public class Main implements ActionListener {

    protected Automato afd = null;
    protected JButton jbutton;

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Main gui = new Main();
        gui.show();
    }

    /**
     * Instantiates buttons, frames, file choosers...
     */
    public void show() {
        if (Utils.DEBUG) {
            File file = new File("/Users/fkrahe/automato.txt");
            try {
                afd = new Automato(file);
            } catch (Exception ex) {
                Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
            }
            work();
        } else {
            jbutton = new JButton(Utils.LABEL_BUTTON_LOAD_FILE);
            JFrame jframe = new JFrame();
            jframe.getContentPane().add(jbutton);
            jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            // sets listener
            jbutton.addActionListener(this);
            jframe.setSize(Utils.WINDOW_WIDTH, Utils.WINDOW_HEIGHT);
            jframe.setVisible(true);
        }
    }

    /**
     * Roda quando o botão de carregar arquivo é pressionado.
     * @param e - é o tipo do evento. Isso vem do botão.
     */
    @Override
    public void actionPerformed(ActionEvent e) {
        try {
            if (e.getSource() == jbutton) {
                JFileChooser fc = new JFileChooser();
                int returnVal = fc.showOpenDialog(jbutton);

                if (returnVal == JFileChooser.APPROVE_OPTION) {
                    afd = new Automato(fc.getSelectedFile());
                    work();
                } else {
                    throw new Exception("Valor de retorno do botão é desconhecido.");
                }
            }
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        }
    }

    private void work() {
        afd.determiniza();
        Utils.printMatrix(afd.getTabelaDeTransicao());
        System.out.println("Novos estados do autômato: ");
        System.out.println(afd.getEstados().toString());
        System.out.println("Novos estados FINAIS do autômato: ");
        System.out.println(afd.getEstadosFinais().toString());
    }
}